// 无序数组中第K大的元素
// 测试链接 : https://leetcode.cn/problems/kth-largest-element-in-an-array/
#include<vector>
#include<iostream>
#include<map>
#include<time.h>
using namespace std;
class Solution 
{
public:
    //优化版本 划分三路
pair<int,int> check(vector<int>&arr,int left,int right,int x)
{
        int i=left,j=right,k=left;
        while(k<=j)//循环终止条件为什么不等于呢？可以这样想j的右边全是大于x的
        //j的位置是收货的位置，当k<j时此时k这个货物还有可能发送到j;如果k与j相等说明不需要发收货了
        {
            if(arr[k]>x) swap(arr[k],arr[j--]);
            else if(arr[k]==x) k++;
            else  swap(arr[k++],arr[i++]);
        }
        return {i,j};
}
    int findKthLargest(vector<int>& nums, int k) 
    {
        int n =nums.size();
        //第k大就是第第n-k+1个小的对应排序后的下标就是n-k
        int left=0,right=n-1,ans=0;
        while(left<=right)
        {
            srand((unsigned int)time(nullptr));
            int index=left+(rand()%(right-left+1));
            int x=nums[index];
            const pair<int,int>& ret=check(nums,left,right,x);
            if(n-k<ret.first)
            {
                right=ret.first-1;
            }
            else if(n-k>ret.second)
            {
                left=ret.second+1;
            }
            else
            {
                ans = nums[n-k];
                break;
            }
        }
        return ans;
    }
};
int first,last;
class Solution1 
{
public:
    void partion(vector<int>&arr, int left,int right,int x)
    {
        int i=left,j=right,k=left;
        while(k<=j)
        {
            if(arr[k]>x)  swap(arr[k],arr[j--]);
            else if(arr[k]<x) swap(arr[k++],arr[i++]);
            else k++;
        }
        first=i;
        last=j;
    }
    int solve(vector<int>&arr,int left,int right,int aim)
    {
        srand(time(nullptr));
        partion(arr,0,arr.size(),arr[(rand()%(right-left+1))+left]);
        int l=first;
        int r= last; 
        if(aim<l) return solve(arr,left,l-1,aim);
        else if(aim>r) return solve(arr,r+1,right,aim);
        else return arr[aim];
    } 
    int findKthLargest(vector<int>& nums, int k) 
    {
        int aim=nums.size()-k;
        return solve(nums,0,nums.size()-1,aim);
    }
};
int main()
{
    int n,k;cin>>n>>k;
    vector<int>arr(n);
    for(auto&ch:arr) cin>>ch;
    cout<<Solution1().findKthLargest(arr,k);
    return 0;
}